1
กลไกการจัดการการคัดลอก
AI037Lesson 16
00:00

การควบคุมวงจรชีวิตของวัตถุในภาษา C++ หมายถึง การควบคุมกลไกพื้นฐานของการดำรงอยู่ภายใน ฮีพและสแต็กการจัดการการคัดลอกกำหนดวิธีที่คลาสจัดการกับ อายุการใช้งาน ผ่านสองกระบวนการ: คือ คอนสตรักเตอร์สำหรับการคัดลอก และ อ็อปเรเตอร์การคัดลอกแบบมอบหมาย.

1. การกำหนดค่าเริ่มต้นเทียบกับการมอบหมาย

การกำหนดค่าเริ่มต้นโดยตรง (เช่น) string dots(10, '.')) จะเรียกคอนสตรักเตอร์โดยตรง อย่างไรก็ตาม การกำหนดค่าเริ่มต้นแบบคัดลอก (string s2 = dots) ขึ้นอยู่กับคอนสตรักเตอร์สำหรับการคัดลอก แตกต่างจากการกำหนดค่าเริ่มต้น การมอบหมาย (trans = accum) จะแทนที่วัตถุเดิมโดยใช้ อ็อปเรเตอร์=. ข้อจำกัดสำคัญ: พารามิเตอร์ของคอนสตรักเตอร์สำหรับการคัดลอกต้องเป็นตัวแปรอ้างอิง (const Foo&); ถ้าไม่ใช่จะทำให้การส่งอาร์กิวเมนต์ด้วยค่า ทำให้เกิด ลูปการเรียกซ้ำแบบไม่สิ้นสุด การเรียกคัดลอกซ้ำกันไม่สิ้นสุด

วัตถุต้นทาง[ข้อมูล A]วัตถุปลายทาง[ข้อมูล A]การคัดลอกแบบสมาชิกต่อสมาชิกคอนสตรักเตอร์สำหรับการคัดลอก / อ็อปเรเตอร์=

2. บทบาทของการสร้างขึ้นเอง

หากคุณไม่ได้กำหนดเมมเบอร์เหล่านี้ คอมไพเลอร์จะสร้าง รูปแบบที่สร้างขึ้นเอง เวอร์ชันที่ทำการคัดลอกแบบสมาชิกต่อสมาชิก ระวัง: แม้ว่าจะเพียงพอสำหรับชนิดข้อมูลง่าย ๆ แต่กลับมักล้มเหลวเมื่อใช้กับคลาสที่จัดการหน่วยความจำแบบไดนามิก ทำให้เกิดการชี้ไปยังที่ว่างเปล่า (dangling pointer) หรือการปล่อยหน่วยความจำซ้ำ (double-free)

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>